/**
 * Created by IntelliJ IDEA.
 * User: Fatadeild Hagkaups
 * Date: 16.11.2011
 * Time: 13:34
 * Þessi klasi er borðið sjálft.
 * Hér er borðið upphafsstillt og hér er einnig bætt við táknum á borðið á rétta staði.
 * Einnig sér þessi klasi um að prenta út borðið.
 */
public class Board
{
    /**
     *Meðlimabreytur klasans.
     */
    protected char [][]board;
    protected char marker_x = 'X';
    protected char marker_o = 'O';

    /**
     * Smiður.
     */
    public Board ()
    {
        board = new char[3][3];
    }

    /**
     *Fall sem prentar út borðið með viðeigandi staðsetningum.
     */
    protected void printBoardWithNumbers()
    {
        int counter = 0;
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                System.out.print("[ " + Character.forDigit(++counter, 10) + " ]");
            }
            System.out.println();
        }
        System.out.println();

    }

    /**
     *Fall sem sér um að prenta út borðið.
     */
    public void printBoard()
    {
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                System.out.print( "[ "+ board[i][j] + " ]");
            }
            System.out.println();
        }
    }

    /**
     *Fall sem sér um að bæta við réttu merki á réttan stað.
     * @param place - Staðsetningin sem merkið á að fara í.
     * @param mark - Annaðhvort X eða O.
     * @return - true ef það tókst að setja merkið á réttan stað, annars false.
     */
    public boolean addToBoard(int place, char mark)
    {
        //counterinn sér um að segja til um hvenær við erum komin í rétt pláss.
        int count = 1;
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                //ef counterinn er orðinn sama og plássið sem við ætlum að setja markið í
                //þá athugum við hvort að staðurinn sé nokkuð nú þegar upptekinn.
                //ef ekki þá setjum við markið á réttan stað og skilum true.
                if(count == place)
                {
                    if(!isOccupied(i, j))
                    {
                        board[i][j] = mark;
                        //Debug purpose: System.out.println("ADDED BOARD[" + i + "][" + j + "] = " + mark);
                        return true;
                    }
                    else
                        return false;
                }
                count++;
            }
        }
        return false;
    }

    /**
     * Fall sem athugar hvort að staðurinn sem við erum að fara að setja merkið í sé upptekinn nú þegar.
     * @param line - i hvaða línu
     * @param column - i hvaða dálki
     * @return - true ef að staðurinn er upptekinn, annars false.
     */
    public boolean isOccupied(int line, int column)
    {

        return board[line][column] == marker_x || board[line][column] == marker_o;

    }
}
